perm filename NLF.SAI[SYS,HE]5 blob
sn#084254 filedate 1974-01-24 generic text, type T, neo UTF8
00100 COMMENT ⊗ VALID 00003 PAGES
00200 C REC PAGE DESCRIPTION
00300 C00001 00001
00400 C00002 00002 BEGIN "NLF"
00500 C00007 00003 PUT_DATA(0,0,"NLF")
00600 C00010 ENDMK
00700 C⊗;
00100 BEGIN "NLF"
00200 REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300 REQUIRE 200 STRING_SPACE;
00400 DEFINE CRLF="'15&'12";
00500 PRELOAD_WITH 0, 0, 0.4, 1.0;
00600 SAFE REAL ARRAY SL[1:4];
00700 SAFE REAL ARRAY NULL[1:4];
00800 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 10.0,
00900 -1.00000, 0.00000, 0.00000, 25.0,
01000 0.00000, 0.00000, -1.00000, 1.0,
01100 0.00000, 0.00000, 0.00000, 1.0;
01200 REAL ARRAY X1[1:4,1:4];
01300 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 20.0,
01400 -1.00000, 0.00000, 0.00000, 25.0,
01500 0.00000, 0.00000, -1.00000, 1.2,
01600 0.00000, 0.00000, 0.00000, 1.0;
01700 REAL ARRAY X2[1:4,1:4];
01800 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 30.0,
01900 -1.00000, 0.00000, 0.00000, 25.0,
02000 0.00000, 0.00000, -1.00000, 0.9,
02100 0.00000, 0.00000, 0.00000, 1.0;
02200 REAL ARRAY X3[1:4,1:4];
02300 PRELOAD_WITH -1.00000, 0.00000, 0.00000, 30.0,
02400 0.00000, 1.00000, 0.00000, 25.0,
02500 0.00000, 0.00000, -1.00000, 0.9,
02600 0.00000, 0.00000, 0.00000, 1.0;
02700 REAL ARRAY SQAR[1:4,1:4];
02800 PRELOAD_WITH 0,0,0,1;
02900 REAL ARRAY ZERO[1:4];
03000 INTEGER I,M;
03100 BOOLEAN FIRST;
03200 STRING S;
03300 LABEL L1;
03400 SIMPLE PROCEDURE SORRY;
03500 BEGIN OUTSTR("SORRY"&CRLF&CRLF);
03600 CALL(0,"EXIT");
03700 END;
03800
03900 SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
04000 BEGIN INTEGER PLAN_SAV;
04100 A[3,4]←A[3,4]-1.00;
04200 B[3,4]←B[3,4]+1.0;
04300 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04400 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
04500 ISSUE(7,"NLF","HAND",MESSAGE MOVE_ARM(A,ARM_PLAN));
04600 IF ARM_PLAN THEN BEGIN
04700 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
04800 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(B,ARM_PLAN));
04900 ISSUE(5,"NLF","HAND",MESSAGE PLACE_ARM);
05000 ISSUE(7,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05100 IF (PLAN_SAV←ARM_PLAN) THEN BEGIN SQAR[1,4]←B[1,4];SQAR[2,4]←B[2,4];SQAR[3,4]←B[3,4]←B[3,4]-1;
05200 ISSUE(5,"NLF","HAND",MESSAGE ARM_CONO(SL,NULL,0,0));
05300 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(SQAR,ARM_PLAN));
05400 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
05500 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05600 B[3,4]←B[3,4]+1;
05700 ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
05800 END;
05900 END;
06000 IF ¬PLAN_SAV THEN BEGIN
06100 OUTSTR("I CANNOT REACH THE BLOCK AT "
06200 &"("&CVS(A[1,4])&","&CVS(A[2,4])&")"&CRLF&
06300 "PLEASE MOVE IT TO "
06400 &"("&CVS(B[1,4])&","&CVS(B[2,4])&") AND TYPE C/R"&CRLF&CRLF);
06500 INCHWL;
06600 OUTSTR("THANK YOU"&CRLF&CRLF);
06700 END ELSE BEGIN
06800 ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
06900 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
07000 END;
07100 END;
07200
07300 RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
07400 BEGIN IF H=1 THEN
07500 BEGIN MOVE_IT(A,B);
07600 RETURN ;
07700 END;
07800 H←H-1;
07900 STACK(H,A,C,B);
08000 MOVE_IT(A,B);
08100 STACK(H,C,B,A);
08200 END;
00100 PUT_DATA(0,0,"NLF");
00200 WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300 OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00400 DO BEGIN
00500 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
00600 ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
00700 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
00800 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
00900 OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
01000 ");
01100 INCHWL;
01200 ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
01300 IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01400 INCHWL;
01500 END;
01600 END UNTIL ¬ARM_STATUS;
01700 OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01800 &CRLF&CRLF);
01900 SETFORMAT(0,1);
02000 X1[3,4]←0.8;
02100 X2[3,4]←0.8;
02200 X3[3,4]←0.8;
02300 S←INCHWL;
02400 I←INTSCAN(S,M);
02500 IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02600 SORRY;END;
02700 M←2↑I-1;
02800 OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02900 SETFORMAT(-5,0);
03000 X1[3,4]←X1[3,4]+I;
03100 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
03200 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03300 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
03400 ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
03500 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03600 OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03700 TYPE C/R TO PROCEED
03800 ");
03900 INCHWL;
04000 STACK(I,X1,X2,X3);
04100 M←ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04200 ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
04300 ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
04400 ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
04500 IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04600 OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04700 THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04800 END;